package tateti;

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 *
 * @author Rodrigo
 */
public class Main {

	/**
	 * @param args the command line arguments
	 */
	public static void main(String[] args) {
		try {
			String entrada;
			InputStreamReader converter = new InputStreamReader(System.in);
			BufferedReader in = new BufferedReader(converter);
			System.out.print("Cantidad de iteraciones de entrenamiento (numero entre 0 y 1000):");
			entrada = in.readLine();
			int cantIteraciones = Integer.parseInt(entrada);
			System.out.print("Pieza con la que desea jugar (\"X\" o \"O\"):");
			String piezaUsuario = in.readLine();

			Jugador j1 = new Jugador("X");
			Jugador j2 = new Jugador("O");

			// Entrenamiento
			for (int i = 0; i < cantIteraciones; i++) {
				Tablero t = new Tablero();
				int[] iJugada = new int[1];
				int[] jJugada = new int[1];
				while (t.getGanador() == null) {
					j1.elegirJugada(new Tablero(t), iJugada, jJugada);
					t.setElem(iJugada[0], jJugada[0], j1.getTipoPieza());
//					System.out.println(t + "");
					if (t.getGanador() == null) {
						j2.elegirJugada(new Tablero(t), iJugada, jJugada);
						t.setElem(iJugada[0], jJugada[0], j2.getTipoPieza());
//						System.out.println(t + "");
					}
				}
//				System.out.println("Gana el jugador con: " + t.getGanador());
			}

			// Luego de entrados los jugadores, se puede proceder a jugar contra ellos
			Jugador jug = j1;
			if (piezaUsuario.equals("X")) {
				jug = j2;
			} else if (!piezaUsuario.equals("O")) {
				throw new Exception("La pieza debe ser una X o una O");
			}

			Tablero t = new Tablero();
			int[] iJugada = new int[1];
			int[] jJugada = new int[1];

			System.out.println("Los numeros de las filas y las columnas deben ser enteros y van de 0 a 4");
			while (t.getGanador() == null) {
				if (piezaUsuario.equals("X")) {
					System.out.println(t + "");
					System.out.print("Elige en que fila poner tu pieza :");
					entrada = in.readLine();
					int i = Integer.parseInt(entrada);
					if (i < 0 || i > 4) {
						throw new Exception("La fila ingresada debe ser un numero entre 0 y 4");
					}
					System.out.print("Elige en que columna poner tu pieza :");
					entrada = in.readLine();
					int j = Integer.parseInt(entrada);
					if (j < 0 || j > 4) {
						throw new Exception("La columna ingresada debe ser un numero entre 0 y 4");
					}
					t.setElem(i, j, piezaUsuario);
					if (t.getGanador() == null) {
						jug.elegirJugada(new Tablero(t), iJugada, jJugada);
						t.setElem(iJugada[0], jJugada[0], jug.getTipoPieza());
					}
				} else {
					jug.elegirJugada(new Tablero(t), iJugada, jJugada);
					t.setElem(iJugada[0], jJugada[0], jug.getTipoPieza());
					if (t.getGanador() == null) {
						System.out.println(t + "");
						System.out.print("Elige en que fila poner tu pieza :");
						entrada = in.readLine();
						int i = Integer.parseInt(entrada);
						if (i < 0 || i > 4) {
							throw new Exception("La fila ingresada debe ser un numero entre 0 y 4");
						}
						System.out.print("Elige en que columna poner tu pieza :");
						entrada = in.readLine();
						int j = Integer.parseInt(entrada);
						if (j < 0 || j > 4) {
							throw new Exception("La columna ingresada debe ser un numero entre 0 y 4");
						}
						t.setElem(i, j, piezaUsuario);
					}
				}
			}
			System.out.println(t + "");
			if (t.getGanador().equals("Empate")) {
				System.out.println("Hay empate");
			} else {
				System.out.println("Gana el jugador con: " + t.getGanador());
			}
		} catch (Exception e) {
			System.out.println("Error: " + e.getMessage());
		}
	}
}
